
import axios from 'axios';
import QS from 'qs';
import { Message, MessageBox } from 'element-ui'
import { getToken } from '@/utils/auth'
import store from '../store'

// 环境的切换
if (process.env.NODE_ENV == 'development') {
  // axios.defaults.baseURL = 'http://192.168.60.9:8070/dsj-web/man/frontReq/';
  axios.defaults.baseURL = process.env.BASE_API;
}
else if (process.env.NODE_ENV == 'debug') {
  axios.defaults.baseURL = 'https://www.ceshi.com';
}
else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = 'https://www.production.com';
}

// 创建axios实例
let service = axios.create({
  // baseURL: process.env.BASE_API, // api的base_url
  timeout: 5000 // 请求超时时间
});

service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// request拦截器
service.interceptors.request.use(config => {
  if (store.getters.token) {
    config.headers = {
      'content-type': 'application/json;charset=UTF-8',
      // 'content-type': 'application/x-www-form-urlencoded',
      'Authorization' : "Token " + getToken('Token'), //携带权限参数
    };
  }
  return config
}, error => {
  Promise.reject(error)
});

// respone拦截器
service.interceptors.response.use(
  response => {
    /**
     * code:1,接口正常返回;
     */
    const res = response.data;
    if (res.code !== 200) { // 请求错误，提示错误信息
      Message({
        message: res.message,
        type: 'error',
        duration: 2 * 1000
      });
      // 根据服务端约定的状态码：5001:非法的token; 5002:其他客户端登录了; 5004:Token 过期了;
      if (res.code === 0) {
        MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          // store.dispatch('LogOut').then(() => {
          //   location.reload()// 为了重新实例化vue-router对象 避免bug
          // })
        })
      }
      return Promise.reject('error')
    }
    else { // res.code === 1,正常返回数据
      return response.data
    }
  },
  error => {
    Message({
      message: error.message,
      type: 'error',
      duration: 3 * 1000
    })
    return Promise.reject(error)
  }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params){
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res.data);
    }).catch(err =>{
      reject(err.data)
    })
  });
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}

// export default { // 暴露htto_mock方法，即后面页面中用到的方法
//   GET(url, params) {
//     return get(url, params)
//   },
//   POST(url, params) {
//     return post(url, params)
//   }
// }

export default service
